package controller;

import java.io.File;

import bean.Bolao;
import bean.Grupo;
import bean.Jogador;
import bean.Rodada;
import dao.BolaoDao;
import dao.CarregaJogos;

/**
 * Classe que gerencia o jogador logado
 * @author Claudio Cardoso, Daniel Leite, Lucas Sampaio, Matheus Sampaio
 * @version 1.0
 */

public class Sessao {
	private Jogador jogadorLogado;
	private Jogador nulo;
	private Bolao bolao;
	private static Sessao sessao = null;

	//construtor
	private Sessao() {
		try {
			bolao = BolaoDao.lerDados();					//Tenta abrir o arquivo do Bolao. Caso seja nulo, entra no catch
		} catch (Exception e1) {
			System.err.println("Erro em ler o Bolao.");
			System.exit(1);
		}
		
		if (bolao == null) {									//Sendo o arquivo lido seja nulo, ele entra no if. Que inicializa
			bolao = new Bolao();								//o essencial para o bolao: usuario root, lista de paises e criacao 
			BolaoFacade bolaoFacade = new BolaoFacade(bolao);	//de grupos
			
			// Cria usuario root, login: root, senha: admin
			Jogador root = new Jogador("root", "01/01/2000", "Campina Grande",
					"Brasil", "root", "admin");
			bolaoFacade.adicionaJogador(root);

			// Cria os grupos dos paises
			String[] paises = { "Todos", "Africa do Sul", "Holanda",
					"Costa do Marfim", "Japao", "Brasil", "Portugal", "Gana",
					"Coreia do Sul", "Espanha", "Eslovenia", "Camaroes",
					"Coreia do Norte", "Italia", "Suecia", "Nigeria", "Australia",
					"Alemanha", "Grecia", "Argelia", "Nova Zelandia", "Argentina",
					"Servia", "Paraguai", "Estados Unidos", "Inglaterra",
					"Dinamarca", "Chile", "Mexico", "Franca", "Eslovaquia",
					"Uruguai", "Honduras" };
			
			for (String pais : paises) {
				Grupo grupo = new Grupo(pais, root);
				bolaoFacade.adicionaGrupo(grupo);
			}
			
			CarregaJogos.processaArquivoDeJogos( new File("jogosRodada1.txt"), bolaoFacade, new Rodada());
			CarregaJogos.processaArquivoDeJogos( new File("jogosRodada2.txt"), bolaoFacade, new Rodada());
			CarregaJogos.processaArquivoDeJogos( new File("jogosRodada3.txt"), bolaoFacade, new Rodada());
		}
		
		try {
			this.nulo = new Jogador("Nulo", "Nulo", "Nulo", "Nulo", "Nulo",
					"Nulo");
			this.jogadorLogado = new Jogador("Nulo", "Nulo", "Nulo", "Nulo",
					"Nulo", "Nulo");
		} catch (Exception e) {
			System.err.println("Construtor de Sessao falhou");
			System.exit(1);
		}
	}

	/**
	 * Retorna a Instacia da Sessao
	 * @return 
	 * 		Sessao
	 */
	public static Sessao getInstance() {
		if (sessao == null) {
			sessao = new Sessao();
			return sessao;
		} else {
			return sessao;
		}
	}

	/**
	 * Modifica Jogador Logado
	 * @param jogadorLogado
	 *            Novo Jogador Logado
	 */
	public void setJogadorLogado(Jogador jogadorLogado) {
		this.jogadorLogado = jogadorLogado;
	}

	/**
	 * Remove Jogador Logado
	 */
	public void removeJogadorLogado() {
		setJogadorLogado(nulo);
	}

	/**
	 * Retorna Jogador Logado
	 * @return 
	 * 		Jogador Logado
	 */
	public Jogador getJogadorLogado() {
		return jogadorLogado;
	}

	/**
	 * Verifica Jogador Logado
	 * @return 
	 * 		True, se existe Jogador Logado. False, caso contrario
	 */
	public boolean jogadorEstaLogado() {
		if (jogadorLogado.equals(nulo)) {
			return false;
		} else {
			return true;
		}
	}

	/**
	 * Retorna Bolao
	 * @return 
	 * 		Bolao
	 */
	public Bolao getBolao() {
		return bolao;
	}
}
